﻿using ExcellentProjectPlus.Aplicacion.Cuestionarios.Opciones;
using ExcellentProjectPlus.Dominio.Cuestionarios.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Cuestionarios.Controllers
{
    public class OpcionesController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDeOpciones _servicioDeGestionDeOpciones;
        #endregion

        #region Constructores
        public OpcionesController(IServicioDeGestionDeOpciones servicioDeGestionDeOpciones)
        {
            _servicioDeGestionDeOpciones = servicioDeGestionDeOpciones;
        }
        #endregion

        //GET
        [HttpGet]
        [ResponseType(typeof(Opcion))]
        public IHttpActionResult ObtenerTodos()
        {
            IEnumerable<Opcion> opciones = _servicioDeGestionDeOpciones.ObtenerOpciones();
            if (opciones == null)
            {
                return NotFound();
            }

            return Ok(opciones);
        }


        //GET
        [HttpGet]
        [Route("api/opciones/{id}")]
        [ResponseType(typeof(Opcion))]
        public IHttpActionResult ObtenerOpcionPorId(int id)
        {
            Opcion opcion = _servicioDeGestionDeOpciones.ObtenerOpcionPorId(id);
            if (opcion == null)
            {
                return NotFound();
            }

            return Ok(opcion);
        }

        [HttpPost]
        [ResponseType(typeof(Opcion))]
        public IHttpActionResult PostOpcion(Opcion opcion)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            _servicioDeGestionDeOpciones.AgregarOpcion(opcion);

            return CreatedAtRoute("DefaultApi", new { id = opcion.IdOpcion }, opcion);
        }

        [HttpPut]
        [Route("api/opciones/{id}")]
        [ResponseType(typeof(Opcion))]
        public IHttpActionResult PutOpcion(int id, [FromBody]Opcion opcion)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            if (id != opcion.IdOpcion)
                return BadRequest();

            _servicioDeGestionDeOpciones.ModificarOpcion(opcion);

            return StatusCode(HttpStatusCode.NoContent);

        }

        [HttpDelete]
        [Route("api/opciones/{id}")]
        [ResponseType(typeof(Opcion))]
        public IHttpActionResult DeleteOpcion(int id)
        {
            Opcion opcion = _servicioDeGestionDeOpciones.ObtenerOpcionPorId(id);

            if (opcion == null)
                return NotFound();

            _servicioDeGestionDeOpciones.EliminarOpcion(opcion);
            return Ok(opcion);
        }
    }
}